#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlDatabase>
#include <QCryptographicHash>
#include <QPushButton>
#include <QLabel>
#include <QFileDialog>
#include <QTextEdit>
#include <QTcpSocket>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT  // 用于 Qt 的信号和槽机制

public:
    explicit MainWindow(QWidget *parent = nullptr);  // 构造函数
    ~MainWindow();  // 析构函数

private slots:
    // 用户注册和登录
    void registerUser();  // 注册用户的槽函数
    void loginUser();     // 登录用户的槽函数

    // 数据库相关
    bool createDatabase(); // 创建数据库的槽函数
    QString hashPassword(const QString &password, const QString &salt); // 密码加密函数

    // 文件选择和传输
    void selectFile();  // 选择文件的槽函数
    QString encryptAndSendFile(const QString &filePath);  // 加密并发送文件的槽函数
    void sendFileToServer(const QString &filePath); // 通过网络发送文件
    void on_sendFileButton_clicked(); // 点击发送文件按钮的槽函数

    // 更新日志显示框
    void updateLog(const QString &message);  // 更新 logTextEdit 显示框内容

    // 下载文件按钮的槽函数
    void downloadFileFromServer();  // 从服务器下载文件的槽函数

    // 审计日志
    void printAuditLog();  // 审计按钮的槽函数

private:
    Ui::MainWindow *ui;  // UI 对象，用于操作界面中的控件
    QString selectedFilePath;  // 用于存储用户选择的文件路径
    bool isLoggedIn;  // 用于表示用户是否已经登录
};

#endif // MAINWINDOW_H
